<?php
class sohapayCompleteDealForm extends Form
{
    function sohapayCompleteDealForm()
    {
        Form::Form('sohapayCompleteDealForm');
    }

    function draw()
    {
        if (!User::is_login()) {
            return;
        }
        global $display;

        $pg = new PG_checkout();
        $check = $pg->verifyReturnUrl();

        $error_text = Url::get('error_text', '');
        $cart_id = $order_id = Url::get('order_id', 0); //id hoa don
        $cart_status = Db_OrderHelper::CART_STATUS_PENDING; //chờ thanh toán

        $error = '';
        $respone = '';
        $respone_code = Url::get('response_code', '');
        $payment_types = Url::get('payment_type', '');
        if ($payment_types == Db_OrderHelper::SOHAPAYMENT_TYPE_INTERNATIONAL) {
            $respone = $pg->getResponseDescriptionInternational($respone_code);
        } else if ($payment_types == Db_OrderHelper::SOHAPAYMENT_TYPE_DOMESTIC) {
            $respone = $pg->getResponseDescriptionDomestic($respone_code);
        }
        $response_message = Url::get('response_message', '');
        $respone .= '/' . $response_message;
        $order_code = '';

        if ($payment_types == Db_OrderHelper::SOHAPAYMENT_TYPE_BANK_TRANSFER && isset($_SESSION['cart']) && isset($_SESSION['cart']['order_id']) && $order_id == $_SESSION['cart']['order_id']) {
            $order_code = $_SESSION['cart']['code'];
            //log to payment_log
            $v = array();
            $v['order_id']          = $order_id;
            $v['order_code']        = $order_code;
            $v['order_email']       = Url::get('order_email', '');
            $v['payment_time']      = strtotime(Url::get('payment_time', ''));
            $v['payment_type']      = Db_OrderHelper::PAYMENT_TYPE_SOHAPAY;
            $v['sp_payment_type']      = Url::get('payment_type', '');
            $v['price']             = Url::get('price', '');
            $v['response_code']     = Url::get('response_code', '');
            $v['response_message']  = $respone;
            $v['transaction_info']  = Url::get('transaction_info', '');
            $v['order_session']     = Url::get('order_session', '');
            $v['error_text']        = Url::get('error_text', '');
            $v['payment_bank_code'] = Url::get('payment_bank_code', '');
            $v['payment_fullname']  = Url::get('payment_fullname', '');
            $v['payment_name']      = Url::get('payment_name', '');

            $payment_log_id = Db_PaymentLog::log($v);
            if($payment_log_id) Db_OrderHelper::updateCart($cart_id, array("payment_log_id" => $payment_log_id));
            //end log

            $payment_info = 'Hình thức thanh toán: Chuyển khoản<br/>';
            $payment_info .= 'Thông tin chuyển khoản<br/>';
            $payment_info .= 'Ngân hàng: ' . Url::get('payment_fullname', '') . '<br/>';
            $payment_info .= 'Số tài khoản: ' . Url::get('payment_bank_code', '');
            $display->add('payment_info', $payment_info);
            $display->add('order_code', $order_code);
            $display->add('price', $_SESSION['cart']['total']);
            unset($_SESSION['cart']);
            Url::redirect('payment', array('cmd'=>'success', 'payment'=>'online', 'sohapayment_type'=> $payment_types, 'payment_bank_code'=>$v['payment_bank_code'], 'payment_fullname'=>$v['payment_fullname'], 'payment_name'=>$v['payment_name'], 'order_id'=>$order_id, 'order_code'=>$order_code));
            return;
        }

        if ($check && ($error_text == '' || $respone_code == '0') && isset($_SESSION['cart']) && $order_id == $_SESSION['cart']['order_id']) {
            $order_code = $_SESSION['cart']['code'];
            $deal_id = $_SESSION['cart']['deal_id'];
            $deal = Db_Deal::getDealHotelById($deal_id);
            $conflict = false;
            $deal_booking = DB::select('deal_booking', 'cart_id=' . $cart_id);
            if($deal['num_deal'] == 0){
                //tạm thời ko kiểm tra số phòng trống
            }else{
                //kiểm tra số lượng deal còn lại
                $deal_left = $deal['num_deal'] - $deal['num_deal_book'];
                if($deal_left <=0) $conflict = true;
            }

            if ($conflict == true) {
                $error = 'conflict';
            } else {
                $cart_status = Db_OrderHelper::CART_STATUS_PAID; //thanh toán thành công
                $booking_status = array('status' => Db_OrderHelper::BOOKING_STATUS_PAID);
                DB::update('deal_booking', $booking_status, 'cart_id=' . $cart_id, __FILE__ . ' line ' . __LINE__);
            }


            if (!isset($cart_cancel_type)) $cart_cancel_type = 0;
            // set history
            $format = '%d/%m/%Y %H:%M:%S';
            $strf = strftime($format);
            $history = 'Tài khoản ' . User::user_name() . ' với email (' . User::user_email() . ') đã thanh toán đơn hàng thành công qua Sohapay lúc ' . $strf;

            $deal_update = array('num_deal_book'=>$deal['num_deal_book'] + $deal_booking['quantity']);
            Db_Deal::updateDealHotel($deal_update, $deal_id);
            Db_DealBooking::updateBillFromCart($cart_id, Db_OrderHelper::BILL_STATUS_PAID, $cart_cancel_type, $history);
            $cart = Db_Booking::getCart($cart_id);
            // send mail cho khach hang khi thanh toan thanh cong
            Db_DealBooking::send_mail_sohapay($cart_id);


            $note_admin = $respone;
            $v = array();
            $v['order_id']          = $order_id;
            $v['order_code']        = $order_code;
            $v['order_email']       = Url::get('order_email', '');
            $v['payment_time']      = strtotime(Url::get('payment_time', ''));
            $v['payment_type']      = Db_OrderHelper::PAYMENT_TYPE_SOHAPAY;
            $v['sp_payment_type']      = Url::get('payment_type', '');
            $v['price']             = Url::get('price', '');
            $v['response_code']     = Url::get('response_code', '');
            $v['response_message']  = $respone;
            $v['transaction_info']  = Url::get('transaction_info', '');
            $v['order_session']     = Url::get('order_session', '');
            $v['error_text']        = Url::get('error_text', '');
            $v['payment_bank_code'] = Url::get('payment_bank_code', '');
            $v['payment_fullname']  = Url::get('payment_fullname', '');
            $v['payment_name']      = Url::get('payment_name', '');

            $payment_log_id = Db_PaymentLog::log($v);

            $data = array('note_admin' => $note_admin, 'user_id_m' => User::id(), 'user_name_m' => User::user_email(), 'time_m' => TIME_NOW, 'status' => $cart_status);
            if($payment_log_id) $data['payment_log_id'] = $payment_log_id;
            Db_OrderHelper::updateCart($cart_id, $data);

            //Xóa khỏi queue
            Db_PaymentLog::removeFromQueue($order_id);
        } else {
            $error = 'security';
            if ($check && $error_text != '') $error = $error_text;
            if($error_text != ''){
                if(isset($_SESSION['cart'])){
                    $order_code = $_SESSION['cart']['code'];

                    //create payment_log
                    $v = array();
                    $v['order_id']          = $order_id;
                    $v['order_code']        = $order_code;
                    $v['order_email']       = Url::get('order_email', '');
                    $v['payment_time']      = strtotime(Url::get('payment_time', ''));
                    $v['payment_type']      = Db_OrderHelper::PAYMENT_TYPE_SOHAPAY;
                    $v['sp_payment_type']      = Url::get('payment_type', '');
                    $v['price']             = Url::get('price', '');
                    $v['response_code']     = Url::get('response_code', '');
                    $v['response_message']  = '';
                    $v['transaction_info']  = Url::get('transaction_info', '');
                    $v['order_session']     = Url::get('order_session', '');
                    $v['error_text']        = Url::get('error_text', '');
                    $v['payment_bank_code'] = Url::get('payment_bank_code', '');
                    $v['payment_fullname']  = Url::get('payment_fullname', '');
                    $v['payment_name']      = Url::get('payment_name', '');

                    $payment_log_id = Db_PaymentLog::log($v);

                    //update cart status -> huy thanh toan
                    $booking_status = array('status' => Db_OrderHelper::BOOKING_STATUS_CANCELLED);
                    DB::update('deal_booking', $booking_status, 'cart_id=' . $cart_id, __FILE__ . ' line ' . __LINE__);
                    $data = array('user_id_m' => User::id(), 'user_name_m' => User::user_email(), 'time_m' => TIME_NOW, 'status' => Db_OrderHelper::CART_STATUS_CANCELLED);
                    if($payment_log_id) $data["payment_log_id"] = $payment_log_id;
                    Db_OrderHelper::updateCart($cart_id, $data);
                }
            }
        }

        unset($_SESSION['cart']);

        if ($error != '') {
            $error = $this->Decode_Error($order_id, $error);
        }
        $display->add('respone_code', $respone_code);
        $display->add('order_code', $order_code);
        if (isset($cart['price'])) $display->add('price', $cart['price']);
        $display->add('error', $error);
        if($error){
            $display->output('error');
        }else{
            Url::redirect('payment', array('cmd'=>'success', 'payment'=>'online', 'sohapayment_type'=> $payment_types, 'order_id'=>$order_id, 'order_code'=>$order_code));
        }

    }



    function Decode_Error($item_id = 0, $code = '')
    {
        $err = '';
        if ($item_id > 0) {
            switch ($code) {
                case 'out_of_product':
                    $err = 'Cùng thời điểm bạn thanh toán đã có khách hàng khác thanh toán hoàn thành trước bạn, do vậy số lượng sản phẩm đã hết.';
                    break;
                case 'no_reciever':
                    $err = 'Không tìm thấy thông tin người nhận hàng';
                    break;
                case 'ship_not_active':
                    $err = 'Chức năng chuyển hàng tận nơi không được kích hoạt';
                    break;
                case 'create_order_error':
                    $err = 'Tạo hóa đơn bị lỗi, không lưu được thông tin';
                    break;
                case 'security':
                    $err = 'Có lỗi xảy ra trong quá trình xử lý';
                    break;
                case 'conflict':
                    $err = 'Có lỗi xảy ra trong quá trình xử lý';
                    break;
                default:
                    $err = $code;
            }
        } else {
            $err = 'Có lỗi xảy ra trong quá trình xử lý';
        }
        return $err;
    }
}
